home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-12-08 | 4.4 KB | 191 lines | [TEXT/????] |
- procedure main ()
- sf([])
-
- write(args(main))
- write(args(write))
-
- # show results of bitwise operations on various operand combinations
-
- every i := 1 | '2' | "3" do {
- write (
- " i j ~j i & j i | j i ^ j i << j i >> j")
- every j := 0 | 1 | 2 | 3 | 4 | 100 do {
- write(right(i,8), right(j,9))
- word (i)
- word (j)
- word (icom (j))
- word (iand (i, j))
- word (ior (i, j))
- word (ixor (i, j))
- word (ishift (i, j))
- word (ishift (i, -j))
- write ()
- }
- }
-
- # test remove() and rename(), and print errors in case of malfunction
-
- name1 := "temp1"
- name2 := "temp2"
- data := "Here's the data"
-
- every remove (name1 | name2) # just in case
- open (name1) & stop ("can't remove ", name1, " to initialize test")
- open (name2) & stop ("can't remove ", name2, " to initialize test")
- remove (name1) & stop ("successfully removed nonexistent file")
- rename (name1, name2) & stop ("successfully renamed nonexistent file")
-
- f := open (name1, "w") | stop ("can't open ",name1," for write")
- write (f, data)
- close (f)
-
- f := open (name1) | stop ("can't open ",name1," after write")
- s := read (f) | ""
- close(f)
- s == data | stop ("data lost after write")
-
- rename (name1, name2) | stop ("can't rename(",name1,",",name2,")")
- f := open (name2) | stop ("can't open ",name2," after rename")
- s := read (f) | ""
- close(f)
- s == data | stop ("data lost after rename")
-
- remove (name1) & stop ("remove succeeded on file already renamed")
- remove (name2) | stop ("can't remove renamed file")
- open (name1) & stop (name1, " still around at end of test")
- open (name2) & stop (name2, " still around at end of test")
-
- # test seek() and where()
-
- f := open("concord.dat")
- write(image(seek(f,11)))
- write(where(f))
- write(image(reads(f,10)))
- write(where(f))
- write(where(f))
- seek(f,-2)
- write(where(f))
- write(image(reads(f,1)))
- write(where(f))
-
- end
-
- # write word in hexadecimal
- procedure word (v)
- xd (v, 8)
- writes (" ")
- return
- end
-
- # write n low-order hex digits of v
- procedure xd (v, n)
- xd (ishift (v, -4), 0 < n - 1)
- writes ("0123456789ABCDEF" [1 + iand (v, 16r0F)])
- return
- end
- # ferr(func,val,err) -- call func(val) and verify that error "err" is produced
-
- procedure ferr (func, val, err)
- write(msg := "oops -- " || image(func) || "(" || image (val) || ") ")
- return
- end
-
- procedure p(a, b, c[])
- write(" image(a):", image(a))
- write(" image(b):", image(b))
- write(" image(c):", image(c))
- write(" every write(\"\\t\", !c):")
- every write("\t", !c)
- end
-
- procedure q(a[])
- write(" every write(\"\\t\", !a):")
- every write("\t", !a)
- end
- procedure show(t)
- local x
-
- write(" *t --> ", *t)
- write(" t[\"xyz\"] --> ", image(t["xyz"]) | "failure")
- write(" member(t, \"xyz\") --> ", image(member(t, "xyz")) | "failure")
- x := sort(t, 3)
- write(" contents of t:")
- while writes("\t", image(get(x)), " : ")
- do write(image(get(x)))
- write("")
- end
-
- # test the new sortf(x,n) function
-
- global data
- record r1(a)
- record r3(a,b,c)
-
- procedure sf (args)
- local n, z
-
- z := []
- every put (z, 1 to 100)
- data := [
- r3(3,1,4),
- [1,5,9],
- r3(2,6,5),
- r3(3,5),
- r1(2),
- 3,
- r1(4),
- r1(8),
- [5,&null,5],
- [4,4,4,4],
- [3,3,3],
- [&null,25],
- 4,
- [2,2],
- [1],
- [&null,&null],
- [],
- r3(7,8,9),
- z]
- dump ("sort(L)", sort (data))
-
- if *args = 0 then
- every test (&null | 1 | "2" | '3' | 4 | 17 | -4 | -3 | "-2" | -1)
- else
- every test (!args)
- end
-
- procedure test (n)
- local r1, r2
- write ()
- write ("-------------------- testing n = ", \n | "&null")
- r1 := sortf (data, n)
- r2 := sortf (set(data), n)
- dump ("sortf(L,n)", r1)
- if same (r1, r2) then
- write ("\nsortf(S,n) [same]")
- else
- dump ("sortf(S,n) [********** OOPS -- results differ: **********]", r2)
- end
-
- procedure dump (s, l)
- local e
- write ()
- write (s, ":")
- every e := !l do {
- writes (" ", left(type(e), 8))
- if (type(e) == ("r1" | "r3" | "list")) then
- every writes (" ", image(e[(1 to 5) | (95 to 100)]) | "\n")
- else
- write (" ", image(e))
- }
- return
- end
-
- procedure same (a, b)
- local i
- if *a ~= *b then fail
- every i := 1 to *a do
- if a[i] ~=== b[i] then fail
- return
- end
-